/**
 * @function zh-cn 类型格式化转文字
 * @function en Type format to text
 */
export const toStr = Object.prototype.toString;

/**
 * @function zh-cn 值是不是对象
 * @function en Is the value an object
 * @param {*} val
 * @returns
 */
export const isObj = val => toStr.call(val) === '[object Object]';

/**
 * @function zh-cn 值是不是字符串
 * @function en Is the value an String
 * @param {*} val
 * @returns
 */
export const isStr = val => val && typeof val === 'string';

/**
 * @function zh-cn 值是不是数字
 * @function en Is the value an Number
 * @param {*} val
 * @returns
 */
export const isNum = val => typeof val === 'number' && !isNaN(val);

/**
 * @function zh-cn 值是否是未定义
 * @function en Is the value undefined
 * @param {*} val
 * @returns
 */
export const isUndef = val => ['', null, undefined].includes(val);
/**
 * @function zh-cn 值是否定义(是否为真)
 * @function en Is the value defined
 * @param {*} val
 * @returns
 */
export const isDef = val => !['', null, undefined].includes(val);

/**
 * @function zh-cn 值是否未定义且是否是非数字值
 * @function en Is the value undefined and non numeric
 * @param {*} val
 * @returns
 */
export const isDefNaN = value => isDef(value) && isNaN(value);

/**
 * @function zh-cn 是不是数组
 * @function en Is value an array
 * @param {*} val
 * @returns
 */
export const isArr = val => toStr.call(val) === '[object Array]'; // 是否为数组

/**
 * @function zh-cn 是不是布尔值
 * @function en Is it boolean
 * @param {*} val
 */
export const isBool = val => toStr.call(val) === '[object Boolean]';

/**
 * @function zh-cn 是不是方法
 * @function en Is it  method
 * @param {*} val
 */
export const isFunc = val => toStr.call(val) === '[object Function]';

/**
 * @function zh-cn 是不是基础类型
 * @function en Is it a basic type
 * @param {*} val
 */
export const isBaseType = val =>
  ['string', 'number', 'boolean', 'undefined'].includes(typeof val) || toStr.call(val) === '[object Null]';

/**
 * @function zh-cn 值是不是对象或数组
 * @function en Is the value an object or array
 * @param {*} val
 * @returns
 */
export const is_Object_or_Array = val => isArr(val) || isObj(val);
